package com.xiaomage.ipcdemo

import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.ServiceConnection
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.os.IBinder
import android.util.Log
import com.xiaomage.aidlserver.IAidlService
import kotlinx.android.synthetic.main.activity_aidl.*

class AIDLActivity : AppCompatActivity() {
    private val TAG="AIDL--客户端：MainActivity"
    private var iAidlService: IAidlService?=null
    private val mServiceConnection=object: ServiceConnection {
        override fun onServiceDisconnected(name: ComponentName?) {
            Log.i(TAG,"onServiceDisconnected")
            iAidlService=null
        }

        override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
            Log.i(TAG,"onServiceDisconnected")
            //获取service对象
            iAidlService= IAidlService.Stub.asInterface(service)
            Log.i(TAG,"绑定成功")
        }

    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_aidl)
        val pid=android.os.Process.myPid()
        Log.d(TAG,"pid:$pid")
        tv_content.setOnClickListener{
            //点击第二次的时候次可以改变TextView的值，因为第一次只是绑定，返回的对象是空。
            //启动服务
            //注意到这里的
            // Intent intent = new Intent(IRemoteService.class.getName());
            // ，和 Service 申明的Action一致。
            intent= Intent(IAidlService::class.java.name)
            Log.e(TAG,IAidlService::class.java.name.toString())
            //这里有一个地方需要注意，在Android 5.0以后，
            // 就不允许使用非特定的Intent来绑定Service了，需要加入下面一句：
            intent.setClassName("com.xiaomage.aidlserver",
                    "com.xiaomage.aidlserver.AidlService")
            // 或者setPackage()
            // intent.setPackage("com.race604.remoteservice");
            bindService(intent,mServiceConnection, Context.BIND_AUTO_CREATE)
            Log.e(TAG,iAidlService.toString())
            if(iAidlService!=null){
                tv_content.text=iAidlService?.value
            }

        }
    }

    override fun onDestroy() {
        super.onDestroy()
        unbindService(mServiceConnection)
    }
}
